Conversation
|
|
||
| ## Формирование метрики | ||
| Для того, чтобы понимать, дают ли мои изменения положительный эффект на быстродействие программы я придумал использовать такую метрику: *тут ваша метрика* | ||
| Для того, чтобы понимать, дают ли мои изменения положительный эффект на быстродействие программы я придумал использовать такую метрику: Количество итераций в секунду. |
There was a problem hiding this comment.
Количество итераций в секунду на каком объёме данных?
There was a problem hiding this comment.
Кажется, не очень удобная метрика с учётом того, что наша программа выполняется намного меньше одного раза в секунду.
| Программа поставлялась с тестом. Выполнение этого теста в фидбек-лупе позволяет не допустить изменения логики программы при оптимизации. | ||
| При чтении и парсинга файла data.txt Выходные данные из benchmark-ips | ||
|
|
||
| `2.995k (± 1.5%) i/s` |
There was a problem hiding this comment.
Что-то не то, не может быть 3000 итераций в секунду.
There was a problem hiding this comment.
это тестовый файл с 3 пользователями. При этом rspec был зеленый. Файл формировался корректно. Такие вот цифры..
| ## Гарантия корректности работы оптимизированной программы | ||
| Программа поставлялась с тестом. | ||
| Выполнение этого теста в фидбек-лупе позволяет не допустить изменения логики программы при оптимизации. | ||
| Для упрощение кода и выделение абстракций я вынес тестирование программы в отдельную директорию `spec` |
| Добавил возможность менять подключаемый файл с данными и отключение GC. Через аттрибуты метода work. | ||
| Для поиска точки роста использовал профилировщики: | ||
| * rbspy - не дал результатов. Основная нагрузка была в самом block in work. Метод work грамозкий и является антипатерном GodObject. | ||
| Для получения более подробной информации метод надо разбить на простые методы. |
| Довел код до зеленных тестов. Пока получилось правда с запашком. | ||
|
|
||
| Треды не включал. Всё происходит синхронно. Тесты запускаю в IDE Rubymine, что возможно могут дать не точные результаты. | ||
| А они вообще могут быть точными? |
There was a problem hiding this comment.
Нет, performance-тесты CPU всегда недетерминированные.
| #### Результат ruby-prof на большом файле | ||
| А тут уже интересно) | ||
| ``` | ||
| Total: 36.541374 |
There was a problem hiding this comment.
В бюджет 30 секунд не удалось уложиться?
There was a problem hiding this comment.
Честно говоря можно и в меньше уложиться. Есть идеи как всё реализовать. Убрать класс Юзер. Имхо это лишняя абстракиця в данной момент. Можно сделать всё как бы в лоб. Так как это маленькая консольная утилита. Формировать первоначальный массив с меньшим кол-вом данных. Попробовать использовать волокнами или очередями для управления потоками. И должно всё гуд. Так же можно было воспользоваться чанками при чтении файла. Честно говоря приходя с работы я уже падал на диван и ни чего не хотелось делать( Мой косяк
Проделал первоначальный рефакт кода.
С каждой итерации собирал профайл и выявлял точку старта.